/**
 * class Upload extends Controller
 {
    public function video(Request $request)
    {
        $file = $request->file('videoFile');
        $file_name = $request->param('fileName');
        $file_ext = $request->param('fileExt');
        $total_page = $request->param('totalPage');
        $page = $request->param('page');

        $uploaddir = 'uploads/temp/';
        if (!is_dir($uploaddir)) {
            mkdir($uploaddir, 0777, true);
        }

        //上传文件要保存的路径
        $fname = sprintf($uploaddir . '%s.%s', md5($file_name), $file_ext);

        try {
            $data = file_get_contents($file->getInfo('tmp_name'));

            if ($page == 1) {
                file_put_contents($fname, $data);
            } else {
                //其余文件追加到文件末尾
                file_put_contents($fname, $data, FILE_APPEND);
            }

            //最后一片文件
            if ($total_page == $page) {
                // 上传成功
                // 删除缓存文件
                @unlink($fname);
                //返回上传状态
                return json(['code' => 2, 'msg' => '上传成功', 'file_url'=>$fname]);
            } else {
                // 分片上传
                //返回上传状态
                return json(['code' => 1, 'msg' => '分片上传成功']);
            }

        } catch (Exception $e) {
            // 删除缓存文件
            @unlink($fname);
            return json(['code' => 0, 'data' => ['error' => $e->getMessage()]]);
        }
    }
}
 *
 */
var video_progress_num_obj = $('#video-progress-number'); // 进度条数值

// 视频上传
upload.render({
    elem: '#upload-video',
    field: 'videoFile',
    url: "<?= url('upload/video') ?>", //此处用的是第三方的 http 请求演示，实际使用时改成您自己的上传接口即可。
    accept: 'file',
    acceptMime: 'video/*',
    auto: false,
    choose: function (obj) {
        // 选中文件后
        if (files) {
            // 删除前一个选择文件
            delete files[Object.keys(files)[0]]
        }

        files = this.files = obj.pushFile(); // 将每次选择的文件追加到文件队列中
        if (files) {
            var first_file = files[Object.keys(files)[0]]
            // 修改文件名
            $('#videoName').html(first_file.name)

            // 显示进度条
            layui.$('#videoProgressInfo').removeClass('layui-hide');
            video_progress_num_obj.html('0%')
            element.progress('video', '0%'); //可配合 layui 进度条元素使用

            // 修改上传状态
            $('#video-upload-status').css('background-color', '#F37B1D');
            $('#video-upload-status-text').html('等待上传');

            var data = this.data;
            var part_size = 10 * 1024 * 1024; // 每片大小
            for (var key in files) {
                var file = files[key];
                var total_size = file.size;
                var total_page = Math.ceil(total_size / part_size);

                $('#totalPage').val(total_page);
                $('#page').val('1');
                $('#status').val('1');

                var fileName = file.name;
                var fileExt = fileName.substr(fileName.lastIndexOf('.') + 1);
                fileName = fileName.substr(0, fileName.lastIndexOf('.'));

                // 分片上传 - 计时器
                var progressTimer = setInterval(function () {
                    var totalPage = parseInt($('#totalPage').val());
                    var page = parseInt($('#page').val());
                    var status = $('#status').val();
                    if (parseInt(totalPage) == parseInt(page) && (parseInt(status) == 2 || parseInt(status) == -1)) {
                        // 计时器停止 - 条件 => 1.最后一片完成时；2.状态为完成2时或者状态为失败-1时
                        clearInterval(progressTimer);
                    } else {
                        if (status == 1) {
                            $('#status').val('0');
                            data.fileName = fileName;
                            data.originFileName = file.name;
                            data.page = page;
                            data.totalPage = totalPage;
                            data.fileExt = fileExt;
                            obj.upload(key, file.slice((page - 1) * part_size, page * part_size));
                        }
                    }
                }, 100);
            }
        }
    },
    done: function (res) {
        // 提交上传后
        // console.log(res)
        if (res.code == 1) { //分片上传
            var page = parseInt($('#page').val());
            var totalPage = parseInt($('#totalPage').val());
            video_progress_num_obj.html(Math.ceil(page * 100 / totalPage) + '%')
            element.progress('video', Math.ceil(page * 100 / totalPage) + '%');
            page = page + 1;
            $('#page').val(page);
            $('#status').val('1');
        } else if (res.code == 2) { //上传完成
            video_progress_num_obj.html('100%')
            element.progress('video', '100%');
            $('#status').val('2'); // 标记完成，使计时器停止
            layui.$('#video_id').val(res.data.file_id)
            layer.msg('上传成功', {time: 1000, anim: 0}, function () {

                layui.$('#video_id').val(res.data.file_id)
                $('#video-upload-status').css('background-color', '#5eb95e');
                $('#video-upload-status-text').html('上传完成');
            });
        } else { //上传错误
            $('#status').val('-1');
            video_progress_num_obj.html('0%')
            element.progress('video', '0%');
            layer.msg("上传失败，请重试", {time: 1000, anim: 0}, function () {
                $('#video-upload-status').css('background-color', '#dd514c');
                $('#video-upload-status-text').html('上传失败');
            });
        }
    }
});